#include "Lboard.h"

__attribute__((weak)) uint32_t FCB_GetPLLFreq(uint32_t clkin_freq);
void Lboard_init(void)
{
  PERIPHERAL_ENABLE(DMAC, 0);
  DMAC_Init();

  if (FCB_GetPLLFreq) {
    uint32_t freq = BOARD_PLL_FREQUENCY;
    SYS_EnableAPBClock(APB_MASK_FCB0);
    if (FCB_IsActive()) {
      freq = FCB_GetPLLFreq(board_pll_clkin_freq());
    } else {
      FCB_Activate();
    }
    SYS_SetPLLFreq(freq);
  }
  SYS_SwitchPLLClock(board_hse_source());

  SYS_EnableAPBClock(MPU6050_GPIO_MASK);
  GPIO_SetOutput(MPU6050_PORT, FSYNC_BIT|AD0_BIT|CLKIN_BIT);
  GPIO_SetLow(MPU6050_PORT, FSYNC_BIT|AD0_BIT|CLKIN_BIT);


  SYS_EnableAPBClock(RADIO_GPIO_MASK);
  GPIO_SetOutput(RADIO_LNA_GPIO_Port, RADIO_LNA_Pin|RADIO_PA_Pin|RADIO_nRESET_PIN);
  GPIO_SetLow(RADIO_LNA_GPIO_Port, RADIO_LNA_Pin|RADIO_PA_Pin);
  GPIO_SetHigh(RADIO_nRESET_PORT, RADIO_nRESET_PIN);

  SYS_EnableAPBClock(LIGHT_GPIO_MASK);
  GPIO_SetOutput(LIGHT_PORT, RED_LIGHT|BLUE_LIGHT);
  GPIO_SetLow(LIGHT_PORT, RED_LIGHT|BLUE_LIGHT);

  //GPIO_SetInput(MPU6050_PORT, INT_BIT);
  //GPIO_EnableInt(MPU6050_PORT, INT_BIT);
  //GPIO_IntConfig(MPU6050_PORT, INT_BIT, GPIO_INTMODE_FALLEDGE);

  INT_Init();
  INT_EnableIntGlobal();
  INT_EnableIntExternal();
}